Telegram Group & Telegram Channel
🐍 Хитрая задача на замыкания в Python

🔹 Уровень: Advanced
🔹 Темы: замыкания (closures), переменные цикла, lambda, отложенное выполнение

📌 Условие

Что выведет следующий код?


funcs = []

for i in range(5):
funcs.append(lambda: i)

results = [f() for f in funcs]
print(results)


Вопросы

1. Почему вывод может не соответствовать ожиданиям [0, 1, 2, 3, 4]?
2. Что именно "запоминает" lambda внутри цикла?
3. Как переписать код, чтобы результат был [0, 1, 2, 3, 4]?

🔍 Разбор

Ожидаемый (неправильный) вывод:

[4, 4, 4, 4, 4]


🔧 Почему так происходит

- Все lambda внутри funcs замыкают одну и ту же переменную `i`.
- К моменту выполнения f() переменная i уже равна 4 — и так для всех функций.

⚠️ Подвох

lambda: i не захватывает значение, а ссылается на переменную, которая будет изменяться при каждой итерации цикла.
В итоге — все lambda ссылаются на одно и то же `i`, которое стало равно 4 к концу цикла.

🧠 Решение

Нужно "зафиксировать" значение i, передав его как аргумент по умолчанию в lambda:


for i in range(5):
funcs.append(lambda i=i: i)


Теперь результат будет:

[0, 1, 2, 3, 4]


📌 Это один из самых частых подвохов в Python, особенно при использовании лямбда-функций в генераторах и UI-коллбеках.



tg-me.com/python_job_interview/1113
Create:
Last Update:

🐍 Хитрая задача на замыкания в Python

🔹 Уровень: Advanced
🔹 Темы: замыкания (closures), переменные цикла, lambda, отложенное выполнение

📌 Условие

Что выведет следующий код?


funcs = []

for i in range(5):
funcs.append(lambda: i)

results = [f() for f in funcs]
print(results)


Вопросы

1. Почему вывод может не соответствовать ожиданиям [0, 1, 2, 3, 4]?
2. Что именно "запоминает" lambda внутри цикла?
3. Как переписать код, чтобы результат был [0, 1, 2, 3, 4]?

🔍 Разбор

Ожидаемый (неправильный) вывод:

[4, 4, 4, 4, 4]


🔧 Почему так происходит

- Все lambda внутри funcs замыкают одну и ту же переменную `i`.
- К моменту выполнения f() переменная i уже равна 4 — и так для всех функций.

⚠️ Подвох

lambda: i не захватывает значение, а ссылается на переменную, которая будет изменяться при каждой итерации цикла.
В итоге — все lambda ссылаются на одно и то же `i`, которое стало равно 4 к концу цикла.

🧠 Решение

Нужно "зафиксировать" значение i, передав его как аргумент по умолчанию в lambda:


for i in range(5):
funcs.append(lambda i=i: i)


Теперь результат будет:

[0, 1, 2, 3, 4]


📌 Это один из самых частых подвохов в Python, особенно при использовании лямбда-функций в генераторах и UI-коллбеках.

BY Python вопросы с собеседований


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/python_job_interview/1113

View MORE
Open in Telegram


Python вопросы с собеседований Telegram | DID YOU KNOW?

Date: |

Mr. Durov launched Telegram in late 2013 with his brother, Nikolai, just months before he was pushed out of VK, the Russian social-media platform he founded. Mr. Durov pitched his new app—funded with the proceeds from the VK sale—less as a business than as a way for people to send messages while avoiding government surveillance and censorship.

In many cases, the content resembled that of the marketplaces found on the dark web, a group of hidden websites that are popular among hackers and accessed using specific anonymising software.“We have recently been witnessing a 100 per cent-plus rise in Telegram usage by cybercriminals,” said Tal Samra, cyber threat analyst at Cyberint.The rise in nefarious activity comes as users flocked to the encrypted chat app earlier this year after changes to the privacy policy of Facebook-owned rival WhatsApp prompted many to seek out alternatives.Python вопросы с собеседований from pl


Telegram Python вопросы с собеседований
FROM USA